package p3myAnalyzer;

import org.apache.lucene.analysis.*;
import org.apache.lucene.util.Version;

import java.io.Reader;
import java.util.Set;

/**
 * 三，
 * d
 * 自定义分词器(停用词)
 */
final public class MyStopAnalyzer extends Analyzer {
    //停用词集合
    private Set stops;

     public MyStopAnalyzer(String[] sws) {
        //true表示忽略大小写
        stops = StopFilter.makeStopSet(Version.LUCENE_35, sws, true);
        System.out.println("StopAnalyzer分析器默认停用词："+StopAnalyzer.ENGLISH_STOP_WORDS_SET);
        //把默认的停用词也加进去
        stops.addAll(StopAnalyzer.ENGLISH_STOP_WORDS_SET);
    }

    @Override
    final public TokenStream tokenStream(String s, Reader reader) {
        //lucene 的tokenStream 实现类有 Tokernizer 和tokenFilter,可以有多个filter
        //那么这多个filter怎么添加的呢。构造方法可以加filter,构造方法的，参数的构造方法中加
        //最后一个是tokenizer(先切分语汇单元，再过滤)
        //比如下面，就使用了LetterTokenizer 这个分词器，来划分语汇单元，然后使用了两个过滤器 LowerCaseFilter和StopFilter
        return new StopFilter(Version.LUCENE_35,
                new LowerCaseFilter(Version.LUCENE_35,
                new LetterTokenizer(Version.LUCENE_35,reader)),stops);
    }
}
